package cn.bootx.common.core.annotation.actable;

import cn.bootx.common.core.code.actable.MySqlCharset;
import cn.bootx.common.core.code.actable.MySqlEngine;

import java.lang.annotation.*;

/**
 * 创建表时的表名
 *
 * @author sunchenbin
 * @version 2016年6月23日 下午6:13:37
 */
// 表示注解加在接口、类、枚举等
@Target(ElementType.TYPE)
// VM将在运行期也保留注释，因此可以通过反射机制读取注解的信息
@Retention(RetentionPolicy.RUNTIME)
// 将此注解包含在javadoc中
@Documented
public @interface Table {

    /**
     * 表名
     * @return 表名
     */
    String name() default "";

    /**
     * 表名
     * @return 表名
     */
    String value() default "";

    /**
     * 表注释，也可以使用@TableComment注解代替
     */
    String comment() default "";

    /**
     * 表字符集，也可以使用@TableCharset注解代替
     * 仅支持cn.bootx.common.actable.constants.MySqlCharsetConstant中的枚举字符集
     */
    MySqlCharset charset() default MySqlCharset.UTF8MB4;

    /**
     * 表引擎，也可以使用@TableEngine注解代替
     * 仅支持cn.bootx.common.actable.constants.MySqlEngineConstant中的存储引擎枚举
     */
    MySqlEngine engine() default MySqlEngine.InnoDB;

    /**
     * 是否开启simple模式配置，开启后字段不写注解@Column也可以采用默认的驼峰转换法创建字段
     */
    boolean isSimple() default true;

    /**
     * 需要排除的属性名，排除掉的属性不参与建表, 静态字段默认会被排除
     */
    String[] excludeFields() default {};

}
